#include<stdio.h>
#include<math.h>
typedef struct complex
{
	float real,imaginary;
}complex_type;
complex_type ad(complex_type x,complex_type y)
{
	complex_type add_;
	add_.real=x.real+y.real;
	add_.imaginary=x.imaginary+y.imaginary;
	return add_;
}
complex_type su(complex_type x,complex_type y)
{
	complex_type sub_;
	sub_.real=x.real-y.real;
	sub_.imaginary=x.imaginary-y.imaginary;
	return sub_;
}
complex_type mu(complex_type x,complex_type y)
{
	complex_type mul_;
	mul_.real=x.real*y.real-x.imaginary*y.imaginary;
	mul_.imaginary=x.real*y.imaginary+x.imaginary*y.real;
	return mul_;
}
int main(void)
{
	complex_type a,b,add,sub,mul;
	scanf("%f%f",&a.real,&a.imaginary);
	scanf("%f%f",&b.real,&b.imaginary);
	add=ad(a,b);
	sub=su(a,b);
	mul=mu(a,b);
	if(add.imaginary==0)
	{
		printf("%.2f    ",add.real);
	}
	else if(add.imaginary<0)
	{
		printf("%.2f%.2fi    ",add.real,add.imaginary);
	}
	else
	{
		printf("%.2f+%.2fi    ",add.real,add.imaginary);
	}
	if(sub.imaginary==0)
	{
		printf("%.2f    ",sub.real);
	}
	else if(sub.imaginary<0)
	{
		printf("%.2f%.2fi    ",sub.real,sub.imaginary);
	}
	else
	{
		printf("%.2f+%.2fi    ",sub.real,sub.imaginary);
	}
	if(mul.imaginary==0)
	{
		printf("%.2f    ",mul.real);
	}
	else if(mul.imaginary<0)
	{
		printf("%.2f%.2fi    ",mul.real,mul.imaginary);
	}
	else
	{
		printf("%.2f+%.2fi    ",mul.real,mul.imaginary);
	}
	return 0;
}
